<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'controllers/admin.php';

/**
 * Контроллер создания и изменения жанра видео
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Admin_Update_Genre extends Admin {
   
   /**
    * Идентификатор жанра
    *
    * @access private
    * @var integer
    */
   var $_id_genre = 0;
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return Admin_Update_Genre
    */
   function Admin_Update_Genre() {
      parent::Admin();
      // Выковыриваем идентификатор
      if (false !== $this->input->get('id')) {
         $this->_id_genre = (int) $this->input->get('id');
      }
      $this->set_menu(6, 2);
      // Подгружаем модельку
      $this->load->model('m_genre');
      $this->m_genre->set_id($this->_id_genre);
      $this->load->language('video');
   } // end Admin_Update_Genre
   
   /**
    * Метод по умолчанию
    *
    * @access public
    */
   function index() {
      $data = array();
      // Стандартные поля
      $title = $this->m_genre->get('title');
      $slug = $this->m_genre->get('slug');
      $description = $this->m_genre->get('description');
      // Валидируем и, если нужно, изменяем
      if (false !== $this->input->post('edit')) {
         $this->load->library('validation');
         $rules = array(
            'title' => 'trim|required|max_length[100]',
            'slug'  => 'trim|callback_check_slug|max_length[100]',
            'description' => 'trim'
         );
         $this->validation->set_rules($rules);
         $result = $this->validation->run();
         // Получаем из поста поля
         $title = $this->validation->title;
         if (isset($this->validation->slug) && !empty($this->validation->slug)) {
            $slug = $this->validation->slug;
         } else {
            // Генерируем uri segment (если не задан)
            $this->load->helper('text');
            // Транслитерируем
            $slug = transliteration($title);
            // Строим урл
            $slug = url_title($slug, 'dash', true);
            // Лимитируем
            $slug = substr($slug, 0, 97);
            // Подстраиваем uri segment так, чтобы он был уникальным в пределах нужного уровня
            $i = 0;
            $sep = '-';
            if (empty($slug)) {
               $sep = '';
            }
            $uri = $slug;
            while (empty($uri) || !$this->check_slug($uri)) {
               $uri = $slug . $sep . (string) ++$i;
            }
            $slug = $uri;
         }
         if (isset($this->validation->description)) {
            $description = $this->validation->description;
         } else {
            $description = '';
         }
         if ($result) {
            // Если проверки пройдены успешно, изменяем стиль
            $this->m_genre->set('title', $title);
            $this->m_genre->set('slug', $slug);
            $this->m_genre->set('description', $description);
            // Сохраняем в базу
            if ($this->m_genre->update()) {
               if (0 == $this->_id_genre) {
                  $this->set_message($this->lang->line('add_genre_succ'), 'info', true);
               } else {
                  $this->set_message($this->lang->line('edit_genre_succ'), 'info', true);
               }
               $this->redirect('admin_manage_genres');
            }
            // Если сюда пришли, значит не все в порядке...
            if (0 == $this->_id_genre) {
               $this->set_message($this->lang->line('add_genre_error'), 'error');
            } else {
               $this->set_message($this->lang->line('edit_genre_error'), 'error');
            }
         }
      }
      // Забиваем в дату поля
      $data['id'] = $this->_id_genre;
      $data['title'] = htmlspecialchars($title);
      $data['slug'] = htmlspecialchars($slug);
      $data['description'] = $description;
      // Выводим
      $view = 'admin/edit_genre.html';
      if (0 == $this->_id_genre) {
         $view = 'admin/add_genre.html';
      }
      $this->set_content($this->parser->parse($view, $data, true));
      $this->display();
   } // end index
   
   /**
    * Функция валидирования uri сегмента на уникальность
    *
    * @access public
    * @param string $name
    * @return boolean
    */
   function check_slug($slug) {
      if (!empty($slug)) {
         if ($this->validation->alpha_dash($slug)) {
            $this->load->model('m_table');
            $this->m_table->set_table('genres');
            $this->m_table->add_restriction('slug', $slug);
            $this->m_table->add_restriction('id_genre', $this->_id_genre, '<>');
            $this->m_table->load_results();
            if (0 == $this->m_table->get_count()) {
               return true;
            } else {
               $this->validation->set_message('check_slug', $this->lang->line('check_slug_error'));
            }
         } else {
            $this->validation->set_message('check_slug', $this->lang->line('alpha_dash'));
         }
         return false;
      }
      return true;
   } // end check_slug
   
}
